/*
 * 创建用户：mleo
 * 项目名称：demo
 * 模块名称：demo
 * 文件名称：BuildFile
 * 修改时间：2017/11/14 13:55:27
 * Copyright (c) 2017.
 */

package com.ichochy.file;

import java.lang.reflect.Field;
import java.util.HashMap;

/**
 * Created by MLeo on 17/6/26.
 */
public class BuildFile {

    public static void main(String[] args) throws Exception {

        HashMap hashMap = new HashMap();
        hashMap.put("key","value");

        CreateUserFile user = new CreateUserFile();
        user.setIdNo("110101201706261236");//证件编号:企业开户时填组织机构代码/社会信用号
        user.setIdType("25");//证件类型:01-身份证18位 02-身份证15位 20-其它 25-企业社会信用代码 注：企业开户时组织机构代码上送20，社会信用号25
        user.setName("测试企业户5");//中文姓名:企业开户时上送企业名称
        user.setGen(null);//性别:1-男,2-女 注：企业开户时送空
        user.setMoPhone("11101111115");//手机号码:个人账户必填
        user.setAccType(1);//账户类型:0：个人账户；1：企业账户；
        user.setEmail("test4@momfo.com");//E-mail地址
        user.setAppId("1111111115");//请求方用户ID:发放方保证唯一
        user.setBusId("111111115");//营业执照编号:不用
        user.setTaxId("100100111111115");//税务登记号:六位行政区划代码+九位组织机构代码
        user.setAdNo("1111111111");//渠道推荐码
        user.setBankAcctype("2");//账户类型:0-基金账户 1-靠档计息账户 2-活期账户
        user.setFucomCode(null);//账户类型:ZZ-华安 0Z-国寿安保  空-银行默认开通的基金公司代码
        user.setInfo("INFO");//请求方保留信息:
        user.setCaccount("6222988812340040");//对公账户号:当企业开户时必输入，作为企业电子账户的绑定账号
        user.setBusIds("111111115");//营业执照编号1
        user.setRevers("REVERS");//保留域
        System.out.println(textFormat(user));
    }

    public static <E> String textFormat(E o) throws Exception {
        Field[] fields = o.getClass().getDeclaredFields();
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            field.setAccessible(true);
            FormatType format = field.getAnnotation(FormatType.class);
            int length = format.length();
            Object obj = field.get(o);
            if(null== obj){
                obj = "";
            }
            String value = obj.toString();
            int textLength = value.getBytes("GBK").length;
            length = length-textLength+value.length();
            String textFormat = "%-"+length+"s";
            builder.append(String.format(textFormat,obj));
        }
        return builder.toString();
    }

}
